/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controle;

import Interface.FormCategoria;
import Modelo.Categoria;
import java.sql.ResultSet;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

/**
 * Classe responsável pelo controla da tabela formulários
 * @author Jonas Gualberto Diel
 */
public class ControlaCategoria {

    Categoria categoria = null;
    JTable tbCategoria = null;
    ResultSet result = null;

    public ControlaCategoria() {

    }

    public ControlaCategoria(Categoria categoria, JTable tbCategoria) {
        this.categoria = categoria;
        this.tbCategoria = tbCategoria;
    }

    public boolean excluirCategoria()
    {
        int questionCategoryId = categoria.getQuestionCategoryId();
        try
        {
            int resultado = FormCategoria.stmt.executeUpdate(
            "DELETE FROM rshquestioncategory WHERE questioncategoryid = '"+questionCategoryId+"'");
            if (resultado != 0) {
                return true;
            }
        } catch (Exception e) {
            return false;
        }
        return false;
    }

    //Insere uma novo formulário na base de dados
    public boolean inserirCategoria() {
        
        //Define os atributos do objeto
        String description = categoria.getDescription();;

        try {
            
            int resultado = FormCategoria.stmt.executeUpdate(
            "insert into rshquestioncategory (description) values "
          + "('"+description+"')");

            if (resultado != 0) {
                return true;
            }
        } catch (Exception e) {
            return false;
        }
        return false;
    }

    //Edita um formulário na base de dados
    public boolean editarCategoria() {

        //Define os atributos do objeto
        int questionCategoryId = categoria.getQuestionCategoryId();
        String description = categoria.getDescription();

        try {

            int resultado = FormCategoria.stmt.executeUpdate(
            "update rshquestioncategory set description = '"+description+"' WHERE questionCategoryId = '"+questionCategoryId+"'");

            if (resultado != 0) {
                return true;
            }
        } catch (Exception e) {
            return false;
        }
        return false;
    }

    //Popula os registros da base de dados na tabela
    public void popularTabela(Categoria filtros) {

        Vector<String> cabecalhos = new Vector<String>();
        Vector dadosTabela = new Vector();
        cabecalhos.add("Codigo");
        cabecalhos.add("Descrição");

        try {
            String sql = "SELECT questioncategoryid,description FROM rshquestioncategory ";

            //Filtros
            if (filtros != null)
            {
                String where = "";
                if ( filtros.getQuestionCategoryId() > 0)
                {
                    where = where + "AND questioncategoryid = '" + filtros.getQuestionCategoryId()+"'";
                }
                if (filtros.getDescription().length() > 0)
                {
                    where = where + "AND description ILIKE '"+filtros.getDescription()+"%'";
                }                
                if ( where.length() > 0)
                {
                    sql = sql + " WHERE " + where.replaceFirst("AND", " ");
                }
            }
            sql = sql + "ORDER BY questioncategoryid ASC";
            
            result = FormCategoria.stmt.executeQuery(sql);

            while (result.next()) {
                Vector<Object> linha = new Vector<Object>();
                linha.add(result.getInt(1));
                linha.add(result.getString(2));
                dadosTabela.add(linha);
            }
        } catch (Exception e) {
            System.out.println("problemas para popular tabela...");
            System.out.println(e);
        }
        tbCategoria.setModel(new DefaultTableModel(dadosTabela, cabecalhos) {

            @Override
            public boolean isCellEditable(int row, int column) {
                return false; //Não permite editar nenhuma coluna direto na tabela
            }
        });

        // permite seleção de apenas uma linha da tabela
        tbCategoria.setSelectionMode(0);

        // redimensiona as colunas de uma tabela
        TableColumn column = null;
        for (int i = 0; i < 2; i++) {
            column = tbCategoria.getColumnModel().getColumn(i);
            switch (i) {
                case 0:
                    column.setPreferredWidth(17);
                    break;
                case 1:
                    column.setPreferredWidth(140);
                    break;
            }
        }

        //Altera as cores das colunas

//        tbPessoas.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
//
//            @Override
//            public Component getTableCellRendererComponent(JTable table, Object value,
//                    boolean isSelected, boolean hasFocus, int row, int column) {
//                super.getTableCellRendererComponent(table, value, isSelected,
//                        hasFocus, row, column);
//                if (row % 2 == 0) {
//                    setBackground(Color.CYAN);
//                } else {
//                    setBackground(Color.WHITE);
//                }
//                return this;
//            }
//        });
    }

    /**
     * Recebe o código do formulário e retorna objeto com os dados populados
     * @param personId -- Código do formulário
     * @return objeto do formulário
     */
    public Categoria obterCategoria(int questionCategoryId)
    {
        try
        {
            String sql = "SELECT questioncategoryid,description FROM rshquestioncategory  WHERE questioncategoryid = '" + questionCategoryId + "'";
            result = FormCategoria.stmt.executeQuery(sql);
            while (result.next())
            {
                Categoria dataCategoria = new Categoria();
                dataCategoria.setQuestionCategoryId(result.getInt(1));
                dataCategoria.setDescription(result.getString(2));
                return dataCategoria;
            }
        }
        catch (Exception e)
        {
            System.out.println("problemas para popular os campos...");
            System.out.println(e);
        }
        return null;
    }
}
